home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_oth / m2path / pathfind.mod < prev    next >
Text File  |  1992-01-12  |  3KB  |  69 lines

  1.  
  2. (* Display current directory path.
  3.    Greg Vigneault, Jan.13.1992
  4.    Box 7169, Stn.A,
  5.    Toronto, Ontario,
  6.    Canada  M5W 1X8.
  7.    greg.vigneault@canrem.uucp
  8.    gregsv@eastern.uucp
  9. *)
  10. MODULE  PathFound;      (* FST Modula-2 v2.0b *)
  11. FROM    stdio           IMPORT  WriteCard, WriteLn, WriteString;
  12. FROM    SYSTEM          IMPORT  ASSEMBLER;
  13.  
  14. TYPE    String67        = ARRAY [0..67] OF CHAR;   (* Path string type *)
  15. VAR    FoundPath    : String67;
  16.         DosError        : CARDINAL;
  17. (*---------------------------------------*)
  18. PROCEDURE CurrentPath( VAR PathStr : String67; VAR stat : CARDINAL );
  19.     BEGIN
  20.         ASM
  21.                 LES     SI, PathStr     (* ptr to ARRAY *)
  22.                 MOV     DI,SI
  23.                 XOR     BX,BX           (* cheap zero *)
  24.                 XOR     AL,AL           (* another *)
  25.                 MOV     CX,67           (* str length *)
  26.         Strz:   MOV     ES:[SI+BX],AL   (* zero out str *)
  27.                 INC     BX              (* bump ptr *)
  28.                 LOOP    Strz            (* zero all *)
  29.                 MOV     AH,19H          (* get current drive *)
  30.                 INT     21H             (* via Dos *)
  31.                 MOV     DL,AL           (* save for later Dos call *)
  32.                 INC     DL              (* 1=A, 2=B... *)
  33.                 ADD     AL,65           (* make 0.. to 'A'.. *)
  34.                 MOV     ES:[SI],AL      (* Drive letter into PathStr *)
  35.                 INC     SI
  36.                 MOV     BYTE ES:[SI],':'        (* from root *)
  37.                 INC     SI
  38.                 MOV     BYTE ES:[SI],'\'
  39.                 INC     SI              (* where Dos will load asciiz *)
  40.                 PUSH    DS              (* save DS *)
  41.                 MOV     AX,ES           (* to set to local *)
  42.                 MOV     DS,AX
  43.                 MOV     AX,4700H        (* get current directory *)
  44.                 INT     21H
  45.                 POP     DS              (* restore M2 data seg *)
  46.                 JC      CPbye
  47.                 XOR     AX,AX           (* all's well *)
  48.         CPbye:  LES     DI, stat
  49.                 MOV     ES:[DI],AX      (* set status *)
  50.         END;    (* asm *)
  51.  
  52. END CurrentPath;
  53. (*---------------------------------------*)
  54. BEGIN   (*PathFound*)
  55.  
  56.     WriteLn;
  57.         CurrentPath( FoundPath, DosError );     (* get current path *)
  58.         IF DosError = 0                         (* no error *)
  59.                 THEN
  60.                         WriteString( "Current path is " );
  61.                         WriteString( FoundPath )
  62.                 ELSE
  63.                         WriteString( "*** DOS error #" );
  64.                         WriteCard( DosError, 2 );
  65.                 END;    (* if *)
  66.         WriteLn
  67.  
  68. END PathFound.
  69.